#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
修复目录嵌套问题脚本
将嵌套的目录结构修复为正确的结构
例如: src/utils/utils/storage.js -> src/utils/storage.js
"""

import os
import shutil
from pathlib import Path

def ensure_dir(path):
    """确保目录存在"""
    os.makedirs(path, exist_ok=True)

def move_contents_up(src_dir, dst_dir):
    """将源目录的内容移动到目标目录"""
    if not os.path.exists(src_dir):
        return False
    
    ensure_dir(dst_dir)
    
    moved_count = 0
    items = os.listdir(src_dir)
    
    if not items:
        print(f"  ⚠ {src_dir} 为空目录")
        return False
    
    for item in items:
        src_path = os.path.join(src_dir, item)
        dst_path = os.path.join(dst_dir, item)
        
        if os.path.exists(dst_path):
            # 如果目标已存在，删除源
            if os.path.isdir(src_path):
                shutil.rmtree(src_path)
            else:
                os.remove(src_path)
            print(f"  ⚠ 跳过: {dst_path} 已存在")
            continue
        
        try:
            shutil.move(src_path, dst_path)
            moved_count += 1
            print(f"  ✓ 移动: {item}")
        except Exception as e:
            print(f"  ✗ 移动失败 {item}: {e}")
    
    return moved_count > 0

def remove_empty_dirs(path):
    """递归删除空目录"""
    if not os.path.exists(path) or not os.path.isdir(path):
        return
    
    try:
        # 先递归删除子目录
        for item in os.listdir(path):
            item_path = os.path.join(path, item)
            if os.path.isdir(item_path):
                remove_empty_dirs(item_path)
        
        # 如果目录为空，删除它
        if not os.listdir(path):
            os.rmdir(path)
            print(f"  ✓ 删除空目录: {path}")
    except Exception as e:
        pass  # 忽略错误，可能是目录不为空

def fix_nested_directories(project_root):
    """修复嵌套目录"""
    src_dir = os.path.join(project_root, 'src')
    
    if not os.path.exists(src_dir):
        print(f"错误: {src_dir} 不存在")
        return
    
    print("=" * 60)
    print("开始修复目录嵌套问题...")
    print("=" * 60)
    
    # 需要修复的目录列表
    directories_to_fix = [
        'utils',
        'components',
        'stores',
        'pages',
        'api',
        'config',
        'static'
    ]
    
    fixed_count = 0
    
    for dir_name in directories_to_fix:
        nested_dir = os.path.join(src_dir, dir_name, dir_name)
        target_dir = os.path.join(src_dir, dir_name)
        
        if os.path.exists(nested_dir):
            print(f"\n修复 {dir_name}/ 目录:")
            if move_contents_up(nested_dir, target_dir):
                fixed_count += 1
        else:
            print(f"\n✓ {dir_name}/ 目录结构正常")
    
    # 清理所有空的嵌套目录
    print("\n清理空目录:")
    for dir_name in directories_to_fix:
        nested_dir = os.path.join(src_dir, dir_name, dir_name)
        if os.path.exists(nested_dir):
            remove_empty_dirs(nested_dir)
        # 也清理父目录下的空目录
        parent_nested = os.path.join(src_dir, dir_name)
        if os.path.exists(parent_nested):
            for item in os.listdir(parent_nested):
                item_path = os.path.join(parent_nested, item)
                if os.path.isdir(item_path) and item == dir_name:
                    remove_empty_dirs(item_path)
    
    print("\n" + "=" * 60)
    print(f"修复完成！共修复 {fixed_count} 个目录")
    print("=" * 60)
    
    # 显示修复后的目录结构
    print("\n修复后的目录结构预览:")
    for dir_name in directories_to_fix:
        dir_path = os.path.join(src_dir, dir_name)
        if os.path.exists(dir_path):
            files = []
            dirs = []
            for item in os.listdir(dir_path):
                item_path = os.path.join(dir_path, item)
                if os.path.isfile(item_path):
                    files.append(item)
                elif os.path.isdir(item_path) and item != dir_name:
                    dirs.append(item)
            
            if files or dirs:
                print(f"\n{dir_name}/")
                for d in dirs[:3]:
                    print(f"  ├── {d}/")
                if len(dirs) > 3:
                    print(f"  ├── ... ({len(dirs) - 3} 个目录)")
                for f in files[:3]:
                    print(f"  ├── {f}")
                if len(files) > 3:
                    print(f"  └── ... ({len(files) - 3} 个文件)")

def main():
    """主函数"""
    project_root = Path(__file__).parent.absolute()
    fix_nested_directories(str(project_root))

if __name__ == '__main__':
    main()

